# Since the Travis CI environment http://docs.travis-ci.com/user/ci-environment/
# provides GNU GCC 4.6, which does not support -std=c++11 GNU GCC 4.8 is installed

# NOTE: Please validate this file after editing it using
#       Travis WebLint https://lint.travis-ci.org/
#       or travis-lint https://github.com/travis-ci/travis-lint

language: cpp
compiler:
  - gcc
  - clang
os:
  - linux
  - osx
sudo: false
cache:
  apt: true

env:
  global:
      # Boost version to use:
      # _MIN is used when building the master branch
      # _MAX is used when building any other branch
    - BOOST_VERSION_MIN="1.49.0"
    - BOOST_VERSION_MAX="1.60.0"
      # List of required boost libraries to build
    - BOOST_LIBS="date_time,filesystem,iostreams,python,regex,system,test"
      # List of required Homebrew formulae to install
    - BREWS="gmp,mpfr"
      # Encrypted COVERITY_SCAN_TOKEN
    - secure: "mYNxD1B8WNSvUeKzInehZ7syi2g1jH2ymeSQxoeKKD2duq3pvNWPdZdc4o9MlWQcAqcz58rhFZRIpuEWCnP0LbbJaG+MyuemMn9uAmg9Y4gFpMsBPHuTdf8pO3rDex+tkrr9puEJFgL+QV/TehxO6NDDpx7UdYvJb+4aZD/auYI="

matrix:
  exclude:
    - os: linux
      compiler: clang
      # Compiling ledger on Linux with clang
      # either crashes clang or results in a ledger binary that crashes with SIGSEGV.
    - os: osx
      compiler: gcc
      # On Mac OS X building ledger with GNU GCC 4.8 fails due to
      # undefined symbols, maybe because boost was not being built with g++-4.8.
      # Undefined symbols for architecture x86_64:
      # "boost::re_detail::perl_matcher<char const*, std::allocator<boost::sub_match<char const*> >, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::construct_init(boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > > const&, boost::regex_constants::_match_flags)", referenced from:
      #     boost::re_detail::perl_matcher<char const*, std::allocator<boost::sub_match<char const*> >, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::perl_matcher(char const*, char const*, boost::match_results<char const*, std::allocator<boost::sub_match<char const*> > >&, boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > > const&, boost::regex_constants::_match_flags, char const*) in main.cc.o
      #     boost::re_detail::perl_matcher<char const*, std::allocator<boost::sub_match<char const*> >, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::perl_matcher(char const*, char const*, boost::match_results<char const*, std::allocator<boost::sub_match<char const*> > >&, boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > > const&, boost::regex_constants::_match_flags, char const*) in global.cc.o
      # "boost::re_detail::perl_matcher<char const*, std::allocator<boost::sub_match<char const*> >, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::find()", referenced from:
      #     bool boost::regex_search<char const*, char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >(char const*, char const*, boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > > const&, boost::regex_constants::_match_flags) in main.cc.o
      #     bool boost::regex_search<char const*, char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >(char const*, char const*, boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > > const&, boost::regex_constants::_match_flags) in global.cc.o

addons:
  coverity_scan:
    project:
      name: "ledger/ledger"
      description: "Build submitted via Travis CI"
    build_command_prepend: "cmake . -DUSE_PYTHON=ON -DBUILD_DEBUG=ON -DCLANG_GCOV=ON"
    build_command: "make"
    branch_pattern: coverity
  apt:
    sources:
      - ubuntu-toolchain-r-test
      #- boost-latest
    packages:
      - gcc-4.8
      - g++-4.8
      - libgmp-dev
      - libmpfr-dev
      - libedit-dev
      #- libboost1.55-dev
      #- libboost-test1.55-dev
      #- libboost-regex1.55-dev
      #- libboost-python1.55-dev
      #- libboost-system1.55-dev
      #- libboost-date-time1.55-dev
      #- libboost-iostreams1.55-dev
      #- libboost-filesystem1.55-dev
      #- libboost-serialization1.55-dev

before_install:
  - if [ "${TRAVIS_BRANCH}" = "master" ]; then export BOOST_VERSION="${BOOST_VERSION_MIN}"; else export BOOST_VERSION="${BOOST_VERSION_MAX}"; fi
  - if [ -n "${BOOST_VERSION}" ]; then export BOOST_ROOT="${TRAVIS_BUILD_DIR}/../boost-trunk"; export CMAKE_MODULE_PATH="${BOOST_ROOT}"; fi
  - if [ "${CXX}" = "g++" ]; then export CXX="$(which g++-4.8)"; export CC="$(which gcc-4.8)"; fi
  - if [ "${TRAVIS_OS_NAME}" = "osx" ]; then export DYLD_LIBRARY_PATH="${BOOST_ROOT}/lib"; fi
    # c++ is a symlink to clang++, but the compiler behaves differently when invoked as c++
  - if [ "${TRAVIS_OS_NAME}" = "osx" -a "${CXX}" = "clang++" ]; then export CXX="$(which c++)"; export CC="$(which cc)"; fi
  - tools/travis-before_install.sh

install:
  - tools/travis-install.sh

before_script:
  - cmake . -DUSE_PYTHON=ON -DBUILD_DEBUG=ON
  - make

script:
  - ctest --output-on-failure
  - PYTHONPATH=. python python/demo.py

after_script:
  # These scripts are run for informational purposes and
  # should be reintegrated into CTest once they reliably verify the documentation.
  - python test/CheckTexinfo.py -l ledger -s .
  - python test/CheckManpage.py -l ledger -s .

notifications:
  email:
    on_success: change
    on_failure: change
  irc:
    channels: [ "chat.freenode.net#ledger" ]
    on_success: change
    on_failure: change
